package pl.poznan.put.cs.idss.viamdp.core.algorithm;

import pl.poznan.put.cs.idss.viamdp.core.structures.Map;

/**
 * Interfejs definiujący podstawowe metody algorytmu rozwiązania MDP.
 * 
 * @author Kornel Lewandowski
 * 
 */
public interface IAlgorithm {

	/**
	 * Ustawia stan świata, w którym algorytm rozpoczyna pracę.
	 * 
	 * @param map
	 *            - obiekt klasy Map
	 */
	void setMap(Map map);

	/**
	 * Sprawdza, czy algorytm zakończył się.
	 * 
	 * @return - wartość logiczna oznaczająca, czy algorytm się zakończył
	 */
	boolean checkIfEnd();

	/**
	 * Wykonuje kolejną iterację algorytmu.
	 */
	void doStep();

	/**
	 * Pobiera bieżący stan świata.
	 * 
	 * @return - obiekt klasy Map, opisujący stan świata
	 */
	Map getCurrentState();

	/**
	 * Zwraca maksymalny błąd w danej iteracji (maksymalną zmianę wartości w
	 * kolejnych iteracjach).
	 * 
	 * @return - wartość błędu
	 */
	double getMaxError();

}
